package net.mingsoft.report_data.biz;

import net.mingsoft.report_data.action.q.HtmlQuery;
import net.mingsoft.report_data.action.r.ReportTypeResponse;
import net.mingsoft.report_data.entity.ZkDataMetricEntity;
import net.mingsoft.report_data.entity.ZkDataReportConfigEntity;
import net.mingsoft.report_data.enums.PeriodEnum;
import net.mingsoft.report_data.enums.ReportPeriodType;
import net.mingsoft.report_data.enums.ReportType;

import java.util.List;

/**
 * 智库报告服务
 * @author gengfa
 * @date 22/03/09
 */
public interface ZkDataBiz {

    /**
     * 生成报告
     * @param periodEnum 时间范围类型
     * @param reportType 报告类型
     * @return 报告生成结果
     */
    @Deprecated
    String genReport(PeriodEnum periodEnum, ReportType reportType);

    /**
     * 自动生成报告
     * @param periodType 时间范围类型
     * @param reports 报告列表
     */
    void autoGenerateReports(ReportPeriodType periodType, List<ZkDataReportConfigEntity> reports);

    /**
     * 生成报告
     * @param query 指标
     * @return 报告HTML
     */
    String genReport(HtmlQuery query);

    /**
     * 保存报告
     * @param reportHtml 报告HTML
     * @param reportType 报告类型
     * @return 保存结果
     */
    boolean saveReport(String reportHtml, ReportType reportType);

    /**
     * 保存报告
     * @param reportHtml 报告HTML
     * @param reportType 报告类型
     * @return 保存结果
     */
    boolean saveReport(String reportHtml, String reportType, String reportPeriodSuffix);

    boolean saveReportManu(String date, String reportHtml, String reportType, String reportPeriodSuffix);

        /**
         * 获取报告类型
         * @return 报告类型
         */
    List<ReportTypeResponse> getReportTypes();

    /**
     * 获取指标列表
     * @param type 报告类型
     * @return 指标列表
     */
    List<ZkDataMetricEntity> getReportMetric(String type);

    /**
     * 获取报告配置
     * @return 报告配置
     */
    List<ZkDataReportConfigEntity> getReports();
}
